这段代码定义了一个名为 `CFX_StockFontArray` 的类，用于管理一组标准字体（也称为“库存字体”或“基础字体”）。这些标准字体通常是指 PDF 文档中预定义的 14 种基础字体，如 Times Roman、Helvetica 和 Courier 等。以下是该类的主要功能和组成部分的详细解释：

### 类定义

```cpp
class CFX_StockFontArray {
public:
  CFX_StockFontArray();
  ~CFX_StockFontArray();

  RetainPtr<CPDF_Font> GetFont(CFX_FontMapper::StandardFont index) const;
  void SetFont(CFX_FontMapper::StandardFont index, RetainPtr<CPDF_Font> pFont);

private:
  std::array<RetainPtr<CPDF_Font>, 14> m_StockFonts;
};
```

### 构造函数和析构函数

- **构造函数 * *`CFX_StockFontArray()`：初始化 `CFX_StockFontArray` 对象，并可能对 `m_StockFonts` 进行默认初始化。
- **析构函数 * *`~CFX_StockFontArray()`：确保在对象销毁时正确释放所有资源。

### 公共成员函数

1. * *GetFont * *
```cpp
RetainPtr<CPDF_Font> GetFont(CFX_FontMapper::StandardFont index) const;
```
- **功能 * *：根据给定的标准字体索引 `index` 获取对应的字体对象。
- **参数 * *：
- `index`：一个 `CFX_FontMapper::StandardFont` 类型的枚举值，表示要获取的标准字体。
- **返回值 * *：返回一个 `RetainPtr<CPDF_Font > ` 类型的智能指针，指向请求的标准字体对象。如果索引无效或字体未设置，则可能返回空指针。

2. * *SetFont * *
```cpp
void SetFont(CFX_FontMapper::StandardFont index, RetainPtr<CPDF_Font> pFont);
```
- **功能 * *：根据给定的标准字体索引 `index` 设置对应的字体对象。
- **参数 * *：
- `index`：一个 `CFX_FontMapper::StandardFont` 类型的枚举值，表示要设置的标准字体。
- `pFont`：一个 `RetainPtr<CPDF_Font > ` 类型的智能指针，指向要设置的字体对象。

### 私有成员变量

- **m_StockFonts * *
```cpp
std::array<RetainPtr<CPDF_Font>, 14> m_StockFonts;
```
- **类型 * *：`std::array<RetainPtr<CPDF_Font>, 14>`
- **说明 * *：一个固定大小为 14 的数组，用于存储 14 种标准字体的智能指针。`RetainPtr` 是一个智能指针，类似于 `std::shared_ptr`，用于管理 `CPDF_Font` 对象的生命周期，确保在不再需要时自动释放资源。

### 使用场景

`CFX_StockFontArray` 类主要用于管理和访问 PDF 文档中的 14 种标准字体。通过 `GetFont` 和 `SetFont` 方法，可以方便地获取和设置这些标准字体。这在处理 PDF 文档时非常有用，因为这些标准字体是 PDF 规范中预定义的，许多 PDF 阅读器和编辑器都依赖于它们来进行文本渲染。

### 示例用法

```cpp
// 创建一个 CFX_StockFontArray 实例
CFX_StockFontArray stockFonts;

// 设置某个标准字体
RetainPtr<CPDF_Font> helvetica = ...; // 假设已经创建了一个 Helvetica 字体对象
stockFonts.SetFont(CFX_FontMapper::StandardFont::Helvetica, helvetica);

// 获取某个标准字体
RetainPtr<CPDF_Font> timesRoman = stockFonts.GetFont(CFX_FontMapper::StandardFont::TimesRoman);
if (timesRoman) {
  // 使用 timesRoman 字体进行文本渲染
}
```

### 总结

`CFX_StockFontArray` 类提供了一种简单而有效的方式来管理和访问 PDF 文档中的 14 种标准字体。它使用智能指针来确保资源的安全管理，并提供了方便的接口来获取和设置这些字体。这对于实现符合 PDF 规范的文本渲染和编辑功能非常重要。

// Copyright 2017 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef CORE_FPDFAPI_FONT_CFX_STOCKFONTARRAY_H_
#define CORE_FPDFAPI_FONT_CFX_STOCKFONTARRAY_H_

#include <array>

#include "core/fxcrt/retain_ptr.h"
#include "core/fxge/cfx_fontmapper.h"

class CPDF_Font;

class CFX_StockFontArray {
 public:
  CFX_StockFontArray();
  ~CFX_StockFontArray();

  RetainPtr<CPDF_Font> GetFont(CFX_FontMapper::StandardFont index) const;
  void SetFont(CFX_FontMapper::StandardFont index, RetainPtr<CPDF_Font> pFont);

 private:
  std::array<RetainPtr<CPDF_Font>, 14> m_StockFonts;
};

#endif  // CORE_FPDFAPI_FONT_CFX_STOCKFONTARRAY_H_
